package Capa_Modelo;

import java.util.ArrayList;

import java.util.List;

import javax.persistence.Query;

import Capa_Datos.CD_Detalleus;

import Capa_Datos.CD_Software;
import Capa_Datos.CD_Unidad;


public class CM_ImplDetalleUnidSoftDAO extends CM_BaseDao implements CM_DeatlleUndSoftDAO {
	
	public CM_ImplDetalleUnidSoftDAO(){
		super();
	}
	CD_Detalleus detalleusS =new CD_Detalleus();
	@SuppressWarnings("unchecked")
	@Override
	public List<CD_Detalleus> RetornarListaSoftware(){
		List<CD_Detalleus> listaUnidSoft =new ArrayList<CD_Detalleus>();
		
		try {
			em.getTransaction().begin();
			Query q = em.createQuery("SELECT s FROM CD_Detalleus s");
			listaUnidSoft =  q.getResultList();
			em.getTransaction().commit();
			
		} catch (Exception e) {
			System.out.print("Error Deatlleus" + e.getLocalizedMessage());
		}
		return listaUnidSoft;
	}
	@Override
	public int eliminarDeatlleus(CD_Detalleus detalleus){
		int indice=1;
		CD_Detalleus detalleT=new CD_Detalleus();
		detalleT=buscarDetalle(detalleus);
		try{
		em.getTransaction().begin();
		detalleT=em.merge(detalleT);
		em.remove(detalleT);
		em.getTransaction().commit();
		}catch (Exception e){
			System.out.println("error eliminar"+detalleT.getSoftware().getNombre() + detalleus.getIdDetalleUS() +e.getLocalizedMessage()+" "+e.getCause()+""+ e.getMessage());
			indice=0;
		}
		return indice;
	}
	public CD_Detalleus buscarDetalle(CD_Detalleus detll){
		CD_Detalleus detalleD =new CD_Detalleus();
		  try{     
			em.getTransaction().begin();
			Query q=em.createQuery("SELECT s FROM CD_Detalleus s WHERE s.idDetalleUS=:idDetalleUS");
			q.setParameter("idDetalleUS",detll.getIdDetalleUS());
		    detalleD=(CD_Detalleus) q.getSingleResult();
		    em.getTransaction().commit();
		
			}catch(Exception e){
				System.out.println("detalleEliminar"+ e.getMessage());	
				
			}
	        
	        return detalleD;
		
	}
	@Override
	public int RegistarDetalleUnidSoft(String unidad, String software){
		int indice=1;
		CD_Unidad unidadD=new CD_Unidad();
		CD_Software softwareS =new CD_Software();
		unidadD=buscarUnidad(unidad);
		softwareS=buscarSoftware(software);
		CD_Detalleus registrarUS =new CD_Detalleus();
		registrarUS.setSoftware(softwareS);
		registrarUS.setUnidad(unidadD);
		try{     
			System.out.print("jojojo");
			em.getTransaction().begin();
		    em.persist(registrarUS);
		    em.flush();
	        em.getTransaction().commit();
	
		}catch(Exception e){
			System.out.print("No existe Unidad "+ unidad + software);	
			indice=0;
		}
		return indice;
	}
	public CD_Unidad buscarUnidad(String unidad){
		CD_Unidad unidadD =new CD_Unidad();
		  try{     
			em.getTransaction().begin();
			Query q=em.createQuery("SELECT s FROM CD_Unidad s WHERE s.nombre=:nombre");
			q.setParameter("nombre",unidad);
		    unidadD=(CD_Unidad) q.getSingleResult();
		         em.getTransaction().commit();
		
			}catch(Exception e){
				System.out.print("UNIDAD"+ e.getMessage()+unidad);	
				
			}
	        
	        return unidadD;
	}
	public CD_Software buscarSoftware(String software){
		String[] separadas2= new String [2];
		separadas2 = software.split(" ");
		CD_Software softwareS=new CD_Software();
        try{     
        em.getTransaction().begin();
		Query q=em.createQuery("SELECT s FROM CD_Software s WHERE s.nombre=:nombre AND s.version=:version");
		q.setParameter("nombre",separadas2[0] );
		q.setParameter("version",separadas2[1]);
	    softwareS=(CD_Software) q.getSingleResult();
	         em.getTransaction().commit();
	
		}catch(Exception e){
			System.out.print("software"+ e.getLocalizedMessage()+ separadas2[0]+separadas2[1]);	
			
		}
        
        return softwareS;
	}


}
